﻿//using Aspose.Font.Ttf;
//using Aspose.Font.TtfHelpers;
//using System;
//using System.Collections.Generic;
//using System.IO;
//using System.Linq;
//using System.Text;
//using System.Text.RegularExpressions;
//using UnityEditor;
//using UnityEngine;

//namespace Assets.Editor.Tools.Font
//{
//    internal class Other
//    {
//        private void ScanProjectCharSets()
//        {
//            if (string.IsNullOrWhiteSpace(EditorToolSettings.Instance.FontCroppingCharSetsOutput) || !Directory.Exists(EditorToolSettings.Instance.FontCroppingCharSetsOutput))
//            {
//                GF.LogWarning("跳过扫描字符集: 字符输出目录为空或目录不存在");
//                return;
//            }
//            StringBuilder strBuilder = new StringBuilder();
//            //扫描prefab中文本组件用到的字符
//            var prefabGuids = AssetDatabase.FindAssets("t:prefab", new string[] { ConstEditor.PrefabsPath });
//            foreach (var guid in prefabGuids)
//            {
//                var assetPath = AssetDatabase.GUIDToAssetPath(guid);
//                var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
//                var allTexts = prefab.GetComponentsInChildren<UnityEngine.UI.Text>(true);
//                var allTmpTexts = prefab.GetComponentsInChildren<TMPro.TMP_Text>(true);
//                foreach (var item in allTexts)
//                {
//                    if (string.IsNullOrEmpty(item.text)) continue;

//                    strBuilder.Append(item.text);
//                }
//                foreach (var item in allTmpTexts)
//                {
//                    if (string.IsNullOrEmpty(item.text)) continue;

//                    strBuilder.Append(item.text);
//                }
//            }
//            //扫描配置表,数据表,多语言文件中的字符
//            var txtFiles = new List<string>();
//            var configs = Directory.GetFiles(ConstEditor.GameConfigPath, "*.txt");
//            if (configs.Length > 0) txtFiles.AddRange(configs);

//            var dataTables = Directory.GetFiles(ConstEditor.DataTablePath, "*.txt");
//            if (dataTables.Length > 0) txtFiles.AddRange(dataTables);

//            var languages = Directory.GetFiles(ConstEditor.LanguagePath, "*.json");
//            if (languages.Length > 0) txtFiles.AddRange(languages);

//            foreach (var item in txtFiles)
//            {
//                var text = File.ReadAllText(item, Encoding.UTF8);
//                if (string.IsNullOrEmpty(text)) continue;
//                strBuilder.Append(text);
//            }

//            //扫描代码中使用的字符
//            var scriptGuids = AssetDatabase.FindAssets("t:script", new string[] { Path.GetDirectoryName(ConstEditor.HotfixAssembly), Path.GetDirectoryName(ConstEditor.BuiltinAssembly) });
//            string charsetsPattern = "\"(.*?)\"";

//            foreach (var item in scriptGuids)
//            {
//                var assetPath = AssetDatabase.GUIDToAssetPath(item);
//                if (Path.GetExtension(assetPath).ToLower() != ".cs") continue;
//                var codeTxt = File.ReadAllText(assetPath);
//                MatchCollection matches = Regex.Matches(codeTxt, charsetsPattern);
//                foreach (Match match in matches)
//                {
//                    string text = match.Groups[1].Value;
//                    if (string.IsNullOrEmpty(text)) continue;
//                    strBuilder.Append(text);
//                }
//            }
//            var resultFile = UtilityBuiltin.ResPath.GetCombinePath(EditorToolSettings.Instance.FontCroppingCharSetsOutput, CharSetsFile);
//            var result = strBuilder.ToString();
//            var unicodeCharSets = String2UnicodeCharSets(result);
//            unicodeCharSets = unicodeCharSets.Distinct().ToArray();

//            result = UnicodeCharSets2String(unicodeCharSets);
//            File.WriteAllText(resultFile, result, Encoding.UTF8);
//            GF.LogInfo($"扫描字符集完成,共[{unicodeCharSets.Length}]个字符. 已保存到字符集文件:{resultFile}");
//        }

//        /// <summary>
//        /// 把字符串转换为
//        /// </summary>
//        /// <param name="str"></param>
//        /// <returns></returns>
//        private static uint[] String2UnicodeCharSets(string str)
//        {
//            var bytesDt = System.Text.Encoding.Unicode.GetBytes(str);
//            uint[] charSets = new uint[bytesDt.Length / System.Text.UnicodeEncoding.CharSize];
//            for (int idx = 0, i = 0; i < bytesDt.Length; i += System.Text.UnicodeEncoding.CharSize)
//            {
//                charSets[idx++] = BitConverter.ToUInt16(bytesDt, i);
//            }
//            return charSets;
//        }

//        /// <summary>
//        /// 把Unicode数值转换为字符串
//        /// </summary>
//        /// <param name="charsets"></param>
//        /// <returns></returns>
//        private static string UnicodeCharSets2String(uint[] charsets)
//        {
//            StringBuilder strBuilder = new StringBuilder();
//            for (int i = 0; i < charsets.Length; i++)
//            {
//                var unicodeChar = char.ConvertFromUtf32((int)charsets[i]);
//                strBuilder.Append(unicodeChar);
//            }
//            return strBuilder.ToString();
//        }

//        /// <summary>
//        /// 裁剪字体
//        /// </summary>
//        /// <param name="ttf"></param>
//        /// <param name="unicodeCharSets"></param>
//        /// <returns></returns>
//        public static bool CroppingFont(string ttf, uint[] unicodeCharSets)
//        {
//            if (Path.GetExtension(ttf).ToLower() != ".ttf")
//            {
//                Debug.LogWarning($"生成裁剪字体[{ttf}]失败:只支持裁剪ttf格式字体");
//                return false;
//            }
//            try
//            {
//                var font = Aspose.Font.Font.Open(Aspose.Font.FontType.TTF, ttf) as TtfFont;
//                var merger = HelpersFactory.GetFontCharactersMerger(font, font);
//                var charsets = unicodeCharSets.Distinct().ToArray();
//                var newFont = merger.MergeFonts(charsets, new uint[0], font.FontName);

//                var newTtf = GenerateNewFontFileName(ttf);
//                newFont.Save(newTtf);
//                AssetDatabase.Refresh();
//                return true;
//            }
//            catch (Exception e)
//            {
//                Debug.LogWarning($"生成裁剪字体[{ttf}]失败:{e.Message}");
//                return false;
//            }
//        }
//    }
//}
